package com.afdor.rws.event.channel;

import com.afdor.rws.event.Event;
import com.afdor.rws.event.channel.client.consumer.handler.EventHandler;
import lombok.NonNull;

/**
 * 事件传递通道
 *
 * @author 悭梵
 * @date Created in 2018-08-08 10:39
 */
public interface ChannelProvider {
    /**
     * 通道初始化方法
     */
    ChannelProvider init();

    /**
     * 退出时关闭通道
     */
    void dispose();

    /**
     * 订阅事件
     *
     * @param eventHandler 事件处理器
     */
    ChannelProvider subscribe(@NonNull String eventSourceName, @NonNull EventHandler eventHandler);

    /**
     * 通过生产者，发送单条事件
     *
     * @param event 事件对象
     */
    ChannelProvider sendEvent(@NonNull Event event);
}
